package health_system.health_system.websocket.Model;
import java.util.logging.Logger;
/**
 * 通信工具类
 * 提供通信相关的辅助方法
 */
public class CommunicationUtils {
    private static final Logger logger = Logger.getLogger(CommunicationUtils.class.getName());

    /**
     * 通信模式枚举
     */
    public enum CommunicationMode {
        VIDEO("video"),
        AUDIO("audio"),
        SCREEN("screen");

        private final String value;

        CommunicationMode(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        /**
         * 从字符串获取通信模式
         * @param mode 模式字符串
         * @return 通信模式枚举，如果不匹配则返回默认VIDEO模式
         */
        public static CommunicationMode fromString(String mode) {
            if (mode == null) {
                return VIDEO;
            }
            
            switch (mode.toLowerCase()) {
                case "audio":
                    return AUDIO;
                case "screen":
                    return SCREEN;
                case "video":
                default:
                    return VIDEO;
            }
        }
    }

    /**
     * 消息类型枚举
     */
    public enum MessageType {
        HANGUP("hangup"),
        CALL_START("call_start"),
        CALL_BACK("call_back"),
        OFFER("offer"),
        ANSWER("answer"),
        ICE("_ice");

        private final String value;

        MessageType(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        /**
         * 从字符串获取消息类型
         * @param type 类型字符串
         * @return 消息类型枚举，如果不匹配则返回null
         */
        public static MessageType fromString(String type) {
            if (type == null) {
                return null;
            }
            
            switch (type.toLowerCase()) {
                case "hangup":
                    return HANGUP;
                case "call_start":
                    return CALL_START;
                case "call_back":
                    return CALL_BACK;
                case "offer":
                    return OFFER;
                case "answer":
                    return ANSWER;
                case "_ice":
                    return ICE;
                default:
                    return null;
            }
        }
    }

    /**
     * 验证通信模式是否有效
     * @param mode 通信模式
     * @return 如果模式有效则返回true，否则返回false
     */
    public static boolean isValidMode(String mode) {
        if (mode == null) {
            return false;
        }
        
        try {
            CommunicationMode.fromString(mode);
            return true;
        } catch (IllegalArgumentException e) {
            return false;
        }
    }

    /**
     * 获取默认通信模式
     * @return 默认通信模式 (VIDEO)
     */
    public static String getDefaultMode() {
        return CommunicationMode.VIDEO.getValue();
    }

    /**
     * 记录通信事件
     * @param username 用户名
     * @param mode 通信模式
     * @param type 消息类型
     * @param details 详细信息
     */
    public static void logCommunicationEvent(String username, String mode, String type, String details) {
        logger.info(String.format("通信事件: 用户=%s, 模式=%s, 类型=%s, 详情=%s", 
            username, mode, type, details));
    }
} 